// 728. 自除数
//自除数 是指可以被它包含的每一位数除尽的数。
//
//例如，128 是一个自除数，因为 128 % 1 == 0，128 % 2 == 0，128 % 8 == 0。
//
//还有，自除数不允许包含 0 。
//
//给定上边界和下边界数字，输出一个列表，列表的元素是边界（含边界）内所有的自除数。
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/self-dividing-numbers

package self_dividing_numbers

// getNumDigits 获取数字各位数字
func getNumDigits(num int) (res []int) {
	for {
		div := num / 10
		rest := num - 10*div
		res = append(res, rest)
		if div == 0 {
			break
		}

		num = div
	}
	return
}

func selfDividingNumbers(left int, right int) (res []int) {
	for n := left; n <= right; n++ {
		// 排除 0
		if n == 0 {
			continue
		}

		flag := true // 判断是否可以加入 res
		list := getNumDigits(n)

		for _, value := range list {
			// 有 0 直接结束
			if value == 0 || n%value != 0 {
				flag = false
				break
			}
		}
		if flag {
			res = append(res, n)
		}
	}
	return
}
